public class Animal {
    String name;
    int age;
    double weight;

    public void eat() {
        System.out.println(name + "吃饭！");
    }

    public void sleep() {
        System.out.println(name + "睡觉！");
    }

    // 构造方法  无参构造  当类内部没有构造方法的时候会自动生成一个无参构造
//    public Animal() {
//        System.out.println("无参构造");
//    }

    public Animal(String name) {
        System.out.println(name);
    }

    //    public Animal(String name, int age) {
//        // name = ; // 局部变量 name 通过name无法访问 成员变量  this.属性名 访问成员变量
//        // 局部变量 跟 成员变量 变量名相同  this.属性名 访问 成员变量
//        System.out.println(name);
////        // this 当前的对象
////        this.name = name;
////        this.age = age;
//    }
    public Animal(String n, int age) {
        name = n; // 成员变量  this.属性名 访问成员变量 等价于 this.name = n;【推荐】
        // 局部变量 跟 成员变量 变量名相同  this.属性名 访问 成员变量
        System.out.println(name);
        this.age = age;   // this.age 代表成员变量age  后面的age代表局部变量
    }

    // 构造方法和方法的区别
    // 修饰符 返回值类型 方法名（参数列表）{方法体}  调用 方法名(实参列表);
    // 修饰符 方法名(参数列表) {方法体}             调用  创建对象 使用 new 方法名(实参列表)
    // 1. 构造方法没有返回值类型，构造方法没有返回值 ，普通方法有返回值类型
    // 2. 方法名-->遵循标识符命名规范即可   构造方法名-->与类名一致
    // 3. 调用：方法名(实参列表);  构造的调用：创建对象 使用 new 方法名(实参列表)

    // 系统默认生成无参构造
    // 当类没有任何形式的构造方法的时候就会默认生成无参构造

    public static void main(String[] args) {
        //
//        Animal dog = new Animal(); // 调用无参构造
//        // dog.name;
//        Animal cat = new Animal("猫猫"); // 调用的有参构造
        Animal duck = new Animal("鸭子", 2);
        System.out.println(duck.age);
        System.out.println(duck.name);
//        Animal duck1 = new Animal();
//        duck1.name = "唐老鸭";
//        duck1.age = 20;
        // 一个类
        // 多个同名方法
        // 参数列表不同（参数个数、类型、顺序）
    }
}
